
#include <stdio.h>
#include "io_input.h"
#include "device.h"
#include "sj_print.h"


static  sj_int8  io_input_device_open(struct file *file_node)
{
    return 0;
}

static  sj_int8  io_input_device_read(struct file *file_node,sj_uint8 *data ,sj_int32 len,sj_loff_t * loff)
{
    struct io_input_device_data *self_data = (struct io_input_device_data *)(file_node->private_data);
    return 0;
}

static  sj_int8  io_input_device_close(struct file *file_node)
{
    return 0;
}
static  sj_int8  io_input_device_poll(struct file *file_node,sj_int32 timeout)
{
    sj_int8 ret =0;

    return ret;
}


static sj_int8 io_input_device_probe(struct device *dev)
{
    sj_int8 ret =0;
    sj_int8 i=0;
    struct io_input_device_data *self_data =(struct io_input_device_data *)dev->private_data;
    if(!self_data)
    {
        ret =-1;
        goto out;
    }
    struct io_input_gpio *input_gpio= self_data->gpio;

    for(i=0;i<self_data->io_num;i++)
    {
        struct gpio_pin *gpio =&input_gpio[i].res;
        struct rcc_apb_periph *apb= &input_gpio[i].rcc_apb;
        struct peripheral_nvic *nvic =&input_gpio[i].nvic;

        sj_gpio_clock_config(apb);

        sj_gpio_init(gpio);

        if(nvic->irq_num>0)
        {
            peripheral_exit_init(gpio->pin);

            peripheral_nvic_init(nvic);
        }
    }

out:
    return ret;
}

static sj_int8 io_input_device_ioctl(struct file *file_node,sj_int8 cmd ,sj_uint8 *data)
{
    sj_int8 ret =0;

    switch(cmd)
    {

        default:
            break;
    }

    return ret;
}

static struct file_operations io_input_opt =
{
    io_input_device_open,
    io_input_device_close,
    NULL,
    io_input_device_read,
    NULL,
    NULL,
    io_input_device_poll,
    io_input_device_ioctl,
};

static struct device_id_table io_input_id_table[]=
{
    {"io_input"},
    {NULL}
};

static struct device_driver io_input_driver={
    "io_input",
    io_input_id_table,
    &io_input_opt,
    io_input_device_probe,
    NULL,
    NULL,
    NULL,
    NULL,
};


static DRIVER_MODULE_INIT(io_input_driver)

